package com.linkgie.galaxyframework.security;

import com.linkgie.galaxyframework.cache.DataCache;

public interface AuthenticationContext {

	/**
	 * 获取当前用户上下文的属性值；
	 * <p>
	 * 注：与缓存的区别在于，缓存会有过期时间，属性值不会过期，直到用户注销登录退出；
	 * 
	 * @return
	 */
	Attributes getAttributes();

	/**
	 * 获取当前用户上下文的缓存；
	 * <p>
	 * 缓存的过期时间默认为 10 分钟；
	 * 
	 * @return
	 */
	DataCache<String, Object> getCache();

	/**
	 * 获取当前用户上下文中的缓存值；
	 * <p>
	 * 缓存的过期时间默认为 10 分钟；
	 * 
	 * @param <T>
	 * @param key
	 * @return
	 */
	<T> T getCachedValue(String key);

	/**
	 * 设置当前用户上下文中的缓存值；
	 * <p>
	 * 缓存的过期时间默认为 10 分钟；
	 * 
	 * @param <T>
	 * @param key
	 * @param value
	 */
	<T> void setCachedValue(String key, T value);

	/**
	 * 属性表；
	 */
	public static interface Attributes {

		Object getAttribute(String key);

		void setAttribute(String key, Object value);

		Object setAttributeIfAbsent(String key, Object value);
	}
}
